﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Net.Sockets;
using System.Net;

using System.Threading;

namespace MyClassSocket
{
    class CCliente : IServCCS
    {
        //start
        public CCliente (string server, int _puerto)
        {
            try
            {
                Servidor = IPAddress.Parse(server);
                puerto = _puerto;
                remotoEP = new IPEndPoint(Servidor, puerto);
                sockCliente = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            }
            catch (Exception e)
            {
                string lala = e.ToString();
                Console.WriteLine(lala);
            }
        }

        //Running
        public void Run()
        {
            try
            {
                Console.WriteLine("Intentando Conectar...");
                sockCliente.Connect(remotoEP);
            }
            catch (Exception e)
            {
                string lala = e.ToString();
                Console.WriteLine(lala);
            }
        }

        //Closed
        public void Close()
        {
            sockCliente.Shutdown(SocketShutdown.Both);
            sockCliente.Close();
        }

        ~CCliente()
        {
            Close();
        }

        //call to the server
        public byte[] callToSv (byte[] paq)
        {
            //esto es muy cabesa, pero no tengo ni idea de como calcular el tamanio del paq que recivo ._.
            //podria enviar un paq de OK con el tamanio del prox paquete, pero seria mas lento creo :_
            byte[] respuesta = new byte[1024];
            try
            {
                sockCliente.Send(paq);
                sockCliente.Receive(respuesta);
            }
            catch (Exception e)
            {
                string lala = e.ToString();
                Console.WriteLine(lala);
            }

            return respuesta;
        }

        //Datos a redefinir.
        public int puerto { get; set; }
        public IPAddress Servidor { get; set; }

        //Datos Procesados redefinidos
        //public Socket cliente;
        private IPEndPoint remotoEP;
        public Socket sockCliente;
    }
}
